初學 Docker 時,很常發生在不知道 docker-compose.yml 該如何撰寫,且官方網站又沒有提供範例參考,僅僅丟下一行 docker run 指令,ex:Redis Container
接下來將會示範該如何拆解 docker run 指令,並撰寫 docker-compose.yml
$ docker run -v ./redis.conf:/usr/local/etc/redis/redis.conf --name myredis redis redis-server /usr/local/etc/redis/redis.conf
首先每一個 docker-compose.yml 最重要的內容就是選擇使用 docker-compose 的版本號
version: "3"                        # docker-compose 版本號
services:                           # 開始撰寫 container 服務
  redis:                            # 可以隨意命名,通常以有意義的字串命名
    image: redis:5.0.5-alpine       # 服務容器,若無指定版號表示使用 latest 版本, alpine 容器佔用空間較小,通常建議使用
接著開始拆解 docker 指令,並轉換至 docker-compose.yml 。
-v 表示掛載,並且使用「:」分隔容器內外的路徑。## 該範例表示機器當前路徑內的「redis.conf」
## 掛載至容器內的「/usr/local/etc/redis/redis.conf」
-v ./redis.conf:/usr/local/etc/redis/redis.conf
看看 docker-compose.yml 該如何繼續延伸:
version: "3"                        # docker-compose 版本號
services:                           # 開始撰寫 container 服務
  redis:                            # 可以隨意命名,通常以有意義的字串命名
    image: redis:5.0.5-alpine       # 服務容器,若無指定版號表示使用 latest 版本, alpine 容器佔用空間較小,通常建議使用
    volumes:                        # 掛載的撰寫方式,如果有多組不同路徑掛載,只需要在新增幾行條件即可。
      - ./redis.conf:/usr/local/etc/redis/redis.conf
--name myredis
看看 docker-compose.yml 該如何繼續延伸:
version: "3"                        # docker-compose 版本號
services:                           # 開始撰寫 container 服務
  redis:                            # 可以隨意命名,通常以有意義的字串命名
    image: redis:5.0.5-alpine       # 服務容器,若無指定版號表示使用 latest 版本, alpine 容器佔用空間較小,通常建議使用
    volumes:                        # 掛載的撰寫方式,如果有多組不同路徑掛載,只需要在新增幾行條件即可。
      - ./redis.conf:/usr/local/etc/redis/redis.conf
    container_name: myredis         # 指容器名稱,這裡比較不同的是指令使用「--name」,但在yml應該使用「container_name」
最後剩下一個指令要進行拆解
## 這一行是指當容器啟動後,該執行的動作
## 表示容器啟動後還需要跑起redis,才算完成。
## 這邊的 redis.conf 即剛剛掛載進入的redis.conf
## 可以先行編輯完內容在掛載。
redis-server /usr/local/etc/redis/redis.conf
看看 docker-compose.yml 該如何繼續延伸:
version: "3"                        # docker-compose 版本號
services:                           # 開始撰寫 container 服務
  redis:                            # 可以隨意命名,通常以有意義的字串命名
    image: redis:5.0.5-alpine       # 服務容器,若無指定版號表示使用 latest 版本, alpine 容器佔用空間較小,通常建議使用
    volumes:                        # 掛載的撰寫方式,如果有多組不同路徑掛載,只需要在新增幾行條件即可。
      - ./redis.conf:/usr/local/etc/redis/redis.conf
    container_name: myredis         # 指容器名稱,這裡比較不同的是指令使用「--name」,但在yml應該使用「container_name」
    command: redis-server /usr/local/etc/redis/redis.conf # command 表示啟動容器後預備執行的動作
另外有時會看見以下範例
$ docker run -e "ENV=develop" redis
docker-compose.yml 範例。version: "3"                        # docker-compose 版本號
services:                           # 開始撰寫 container 服務
  redis:                            # 可以隨意命名,通常以有意義的字串命名
    image: redis:5.0.5-alpine       # 服務容器,若無指定版號表示使用 latest 版本, alpine 容器佔用空間較小,通常建議使用
    volumes:                        # 掛載的撰寫方式,如果有多組不同路徑掛載,只需要在新增幾行條件即可。
      - ./redis.conf:/usr/local/etc/redis/redis.conf
    container_name: myredis         # 指容器名稱,這裡比較不同的是指令使用「--name」,但在yml應該使用「container_name」
    command: redis-server /usr/local/etc/redis/redis.conf # command 表示啟動容器後預備執行的動作
    environment:                    # 提供參數至容器內部,docker 指令是使用「-e 或者 --env」,但在yml應該使用「environment」
      - ENV=develop
以上就完成了 docker run  指令的拆解了,明天會在示範該如何建制自己的 image 。